package cn.wolfcode.trip.api.controller;

import cn.wolfcode.trip.base.domain.Region;
import cn.wolfcode.trip.base.domain.Strategy;
import cn.wolfcode.trip.base.query.StrategyQueryObject;
import cn.wolfcode.trip.base.service.IRegionService;
import cn.wolfcode.trip.base.service.IStrategyService;
import com.github.pagehelper.PageInfo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/regions")
public class RegionController {

    @Autowired
    private IRegionService regionService;

    @Autowired
    private IStrategyService strategyService;

    @Autowired
    private ServletContext servletContext;  // 上下文路径

    /**
     * 请求路径	/regions
     * 请求方式	get
     * 请求参数	无
     * 返回结果	列表
     */
    @GetMapping
    public List<Region> listAll(Integer state) {
        return regionService.selectAll(state);
    }

    /**
     * 获取某个地区下的攻略数据
     * 资源 /regions/{id}/strategies
     * 请求方式 get
     * 请求参数 待定
     * 返回结果 局部html
     */
    @GetMapping(value = "{regionId}/strategies", headers = "accept=text/html")
    public void query(StrategyQueryObject qo, HttpServletResponse response) throws Exception {
        // 获取该地区下的所有推荐的攻略（查全部）
        qo.setPageSize(0);  // 设为0，分页插件就会查询全部
        qo.setState(Strategy.STATE_HOT);    // 推荐状态
        PageInfo hot = strategyService.query(qo);
        // 获取该地区下的所有攻略（分页）
        qo.setPageSize(4);  // 分页
        qo.setState(null);  // 不需要状态
        qo.setNotDisable(true);
        PageInfo all = strategyService.query(qo);

        Map root = new HashMap();
        root.put("hot", hot);
        root.put("all", all);
        // 创建freemarker的配置对象
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
        // 指定模板文件目录
            // 通过上下文对象获取真实路径
        cfg.setDirectoryForTemplateLoading(new File(servletContext.getRealPath("templates")));
        // 设置编码
        cfg.setDefaultEncoding("UTF-8");
        // 获取模板文件
        Template template = cfg.getTemplate("test.ftl");
        // 设置响应编码
        response.setContentType("text/html;charset=utf-8");
        // 合并模板和数据
        template.process(root, response.getWriter());
    }

    /**
     * 获取某个地区下的攻略数据
     * 资源 /regions/{id}/strategies
     * 请求方式 get
     * 请求参数 待定
     * 返回结果 json
     */
    @GetMapping(value = "{regionId}/strategies", headers = "accept=application/json")
    public PageInfo query(StrategyQueryObject qo) throws Exception {
        qo.setPageSize(4);
        return strategyService.query(qo);
    }
}
